﻿using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;
using equinoxWeb.Models;

namespace equinoxWeb.GestionConexion
{
    public class ClubFunction
    {
        public static Club abrirClub(int id)
        {
            Club club = new Club();
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("SELECT idclub,idcliente,nombre,direccion " +
                "FROM club WHERE idclub=@id", con);
            cmd.Parameters.AddWithValue("@id", id);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();

            if (res.Read())
            {
                club.IdClub = res.GetInt32("idclub");
                club.IdCliente = res.GetInt32("idcliente");
                club.Nombre = res.GetString("nombre");
                club.Direccion = !res.IsDBNull(3) ? res.GetString("direccion"):"";
            }
            else
                club = null;
            res.Close();
            gestor.CloseConnection();
            return club;
        }

        public static void eliminarClubes(int idCliente, MySqlConnection con)
        {
            MySqlCommand cmd;
            cmd = new MySqlCommand("delete from club where idcliente =@idcliente ", con);
            cmd.Parameters.AddWithValue("@idcliente", idCliente);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
        }

        public static void agregarClubes(int idCliente, string[] clubes,string[] direcciones, MySqlConnection con)
        {
            if (clubes == null) return;
            for (int i = 0; i < clubes.Length; i++)
            {
                MySqlCommand cmd;
                string club = clubes[i];
                string direccion = direcciones[i];
                cmd = new MySqlCommand("Insert into club (idclub,idcliente,nombre,direccion) " +
                    " values (@idclub,@idcliente,@nombre,@direccion)", con);
                cmd.Parameters.AddWithValue("@idclub", i + 1);
                cmd.Parameters.AddWithValue("@idcliente", idCliente);
                cmd.Parameters.AddWithValue("@nombre", club);
                cmd.Parameters.AddWithValue("@direccion", direccion);
                cmd.Prepare();
                cmd.ExecuteNonQuery();
            }
        }

        public static void modificarClubes(int idCliente, string[] clubes, string[] direcciones, int upperBound, MySqlConnection con)
        {
            if (clubes == null) return;
            for (int i = 0; i < upperBound; i++)
            {
                MySqlCommand cmd;
                string club = clubes[i];
                string direccion = direcciones[i];
                cmd = new MySqlCommand("update club set nombre = @nombre, direccion = @direccion  " +
                    " where idclub = @idclub and idcliente = @idcliente ", con);
                cmd.Parameters.AddWithValue("@idclub", i + 1);
                cmd.Parameters.AddWithValue("@idcliente", idCliente);
                cmd.Parameters.AddWithValue("@nombre", club);
                cmd.Parameters.AddWithValue("@direccion", direccion);
                cmd.Prepare();
                cmd.ExecuteNonQuery();
            }
        }

        public static int contarClubes(int idCliente, MySqlConnection con)
        {
            MySqlCommand cmd;
            cmd = new MySqlCommand("select count(*) from club where idcliente=@idcliente ", con);
            cmd.Parameters.AddWithValue("@idcliente", idCliente);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            int nClubes = 0;
            if (res.Read())
            {
                nClubes = res.GetInt32(0);
            }
            res.Close();
            return nClubes;

        }

        public static void agregarClubes(int idCliente, string[] clubes, string[] direcciones, int lowerBound, MySqlConnection con)
        {
            if (clubes == null) return;
            for (int i = lowerBound; i < clubes.Length; i++)
            {
                MySqlCommand cmd;
                string club = clubes[i];
                string direccion = direcciones[i];
                cmd = new MySqlCommand("Insert into club (idclub,idcliente,nombre,direccion) " +
                    " values (@idclub,@idcliente,@nombre,@direccion)", con);
                cmd.Parameters.AddWithValue("@idclub", i + 1);
                cmd.Parameters.AddWithValue("@idcliente", idCliente);
                cmd.Parameters.AddWithValue("@nombre", club);
                cmd.Parameters.AddWithValue("@direccion", direccion);
                cmd.Prepare();
                cmd.ExecuteNonQuery();
            }
        }

        public static List<Club> listarClubes(int idCliente)
        {
            List<Club> clubes = new List<Club>();
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("SELECT idclub,idcliente,nombre,direccion " +
                "FROM club WHERE idcliente=@id order by idclub", con);
            cmd.Parameters.AddWithValue("@id", idCliente);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            while (res.Read())
            {
                Club club = new Club();
                club.IdClub = res.GetInt32("idclub");
                club.IdCliente = res.GetInt32("idcliente");
                club.Nombre = res.GetString("nombre");
                club.Direccion = !res.IsDBNull(3) ? res.GetString("direccion") : "";
                clubes.Add(club);
            }
            return clubes;
        }
        public static void editarClubes(int idCliente, string[] clubes,string[] direcciones)
        {
            GestorConexion gestor = new GestorConexion();
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlTransaction tran = con.BeginTransaction();
            try
            {
                int nClubes = contarClubes(idCliente, con);
                modificarClubes(idCliente, clubes,direcciones, nClubes, con);
                agregarClubes(idCliente, clubes,direcciones, nClubes, con);
                tran.Commit();
                gestor.CloseConnection();
            }
            catch (Exception ex)
            {
                tran.Rollback();
                //throw ex;
            }

        }

    }
}